package com.afei.mybatis.mapper;

import com.afei.mybatis.pojo.Emp;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 动态sql：
 * 1.if:根据标签中的test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中
 *
 * 2.where和if结合使用：
 * a>若where标签中的if条件都不满足，则where标签没有任何功能，即不会添加where关键字
 * b>若where标签中的if条件满足，则where标签会自动添加where关键字，并将条件最前方多余的
 * and去掉
 * 注意：where标签不能去掉条件最后多余的and
 *
 * 3.trim用于去掉或添加标签中的内容
 * 常用属性：
 * prefix：在trim标签中的内容的前面添加某些内容
 * prefixOverrides：在trim标签中的内容的前面去掉某些内容
 * suffix：在trim标签中的内容的后面添加某些内容
 * suffixOverrides：在trim标签中的内容的后面去掉某些内容
 * 注意：若标签没有内容时候，trim标签也没有任何效果
 *
 * 4.choose、when、otherwise，相当于if...else if...else
 * when至少要有一个，otherwise最多只有一个
 *
 * 5.foreach
 * 属性：
 * collection：设置要循环的数组或集合
 * item：表示集合或数组中的每一个数据
 * separator：设置循环体之间的分隔符
 * open：设置foreach标签中的内容的开始符
 * close：设置foreach标签中的内容的结束符
 * 6.sql标签
 * 设置sql片段：<sql id="empColumns">eid,emp_name</sql>
 * 引入sql片段：<include refid="empColumns"></include>
 */
public interface DynamicSQLMapper {
    /**
     * 多条件查询
     */
    List<Emp> getEmpByCondition(Emp emp);
    /**
     * 测试choose，when，otherwise标签
     */
    List<Emp> getEmpByChoose(Emp emp);
    /**
     * 通过数组实现批量删除
     */
    int deleteEmpByArray(@Param("eids") Integer[] eids);
    /**
     * 通过数组实现批量添加
     */
    int insertEmpByList(@Param("emps") List<Emp> emps);
}
